#!/bin/bash

# 博客系统部署脚本
# 使用方法: ./deploy.sh

set -e

echo "============================================"
echo "开始部署博客系统"
echo "============================================"

# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# 检查是否为 root 用户
if [ "$EUID" -eq 0 ]; then 
   echo -e "${RED}请勿使用 root 用户运行此脚本${NC}" 
   exit 1
fi

# 获取当前目录
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$SCRIPT_DIR"

echo -e "${GREEN}当前目录: $(pwd)${NC}"

# 步骤1: 更新代码
echo -e "\n${YELLOW}[1/6] 更新代码...${NC}"
if [ -d ".git" ]; then
    git pull origin main
    echo -e "${GREEN}✓ 代码更新完成${NC}"
else
    echo -e "${YELLOW}! 当前目录不是 git 仓库，跳过更新${NC}"
fi

# 步骤2: 部署后端
echo -e "\n${YELLOW}[2/6] 部署后端服务...${NC}"
if command -v docker &> /dev/null; then
    echo "使用 Docker 部署后端..."
    docker-compose -f docker-compose-blog.yml up -d --build
    echo -e "${GREEN}✓ 后端服务部署完成${NC}"
    
    # 等待服务启动
    echo "等待服务启动..."
    sleep 5
    
    # 检查服务健康状态
    if curl -f http://localhost:8001/health > /dev/null 2>&1; then
        echo -e "${GREEN}✓ 后端服务健康检查通过${NC}"
    else
        echo -e "${YELLOW}! 后端服务可能未完全启动，请检查日志${NC}"
        docker logs blog-backend --tail 50
    fi
else
    echo -e "${RED}未安装 Docker，请使用 supervisor 方式部署${NC}"
    echo "参考 DEPLOYMENT.md 的备选方案"
fi

# 步骤3: 构建前端
echo -e "\n${YELLOW}[3/6] 构建前端...${NC}"
if [ ! -d "frontend" ]; then
    echo -e "${RED}错误: frontend 目录不存在${NC}"
    exit 1
fi

cd frontend

# 检查 node_modules
if [ ! -d "node_modules" ]; then
    echo "安装依赖..."
    npm install
fi

# 构建
echo "开始构建前端..."
npm run build

echo -e "${GREEN}✓ 前端构建完成${NC}"

# 回到项目根目录
cd ..

# 步骤4: 部署前端到 nginx
echo -e "\n${YELLOW}[4/6] 部署前端到 Nginx...${NC}"

if [ ! -d "frontend/dist" ]; then
    echo -e "${RED}错误: frontend/dist 目录不存在${NC}"
    exit 1
fi

# 创建目标目录
sudo mkdir -p /usr/share/nginx/html/blog

# 复制文件
sudo cp -r frontend/dist/* /usr/share/nginx/html/blog/

echo -e "${GREEN}✓ 前端文件已复制到 Nginx${NC}"

# 步骤5: 更新 nginx 配置
echo -e "\n${YELLOW}[5/6] 更新 Nginx 配置...${NC}"

# 检查 nginx 配置
if sudo nginx -t; then
    echo -e "${GREEN}✓ Nginx 配置测试通过${NC}"
    sudo nginx -s reload
    echo -e "${GREEN}✓ Nginx 配置已重新加载${NC}"
else
    echo -e "${RED}✗ Nginx 配置测试失败${NC}"
    echo "请检查 /etc/nginx/nginx.conf"
    exit 1
fi

# 步骤6: 验证部署
echo -e "\n${YELLOW}[6/6] 验证部署...${NC}"

# 检查后端
if curl -f http://localhost:8001/health > /dev/null 2>&1; then
    echo -e "${GREEN}✓ 后端服务运行正常${NC}"
else
    echo -e "${RED}✗ 后端服务无法访问${NC}"
fi

# 检查前端文件
if [ -f "/usr/share/nginx/html/blog/index.html" ]; then
    echo -e "${GREEN}✓ 前端文件部署成功${NC}"
else
    echo -e "${RED}✗ 前端文件未找到${NC}"
fi

echo -e "\n============================================"
echo -e "${GREEN}部署完成！${NC}"
echo "============================================"
echo -e "前端地址: ${GREEN}http://peter-pan.website/blog${NC}"
echo -e "API地址: ${GREEN}http://peter-pan.website/api${NC}"
echo -e "API文档: ${GREEN}http://peter-pan.website/api/docs${NC}"
echo ""
echo "查看日志:"
echo "  docker logs -f blog-backend"
echo "  sudo tail -f /var/log/nginx/access.log"
echo "============================================"

